/**
 * Web OCPC API 测试脚本
 * 使用 Node.js 测试三个接口：创建短码、查询长码、上报转化数据
 * 
 * 使用方法：
 *   node test_ocpc_api.js
 * 
 * 依赖：无（使用原生 http/https 模块）
 */

const http = require('http');
const https = require('https');

// ==================== 配置 ====================
const CONFIG = {
  // 服务器地址
  baseUrl: 'http://localhost:8000',
  
  // 应用ID
  appId: 'diskcleanup-official-vip',
  
  // 子渠道ID（根据实际配置修改）
  subId: 'bd-001',  // 百度渠道
  
  // 测试数据
  testUrl: 'https://example.com/download?bd_vid=test123456&logid=testlogid789',
  testPayload: JSON.stringify({ channel: 'baidu_sem', campaign: 'test' })
};

// ==================== HTTP 请求封装 ====================
function request(options, postData) {
  return new Promise((resolve, reject) => {
    const lib = options.protocol === 'https:' ? https : http;
    
    const req = lib.request(options, (res) => {
      let data = '';
      
      res.on('data', (chunk) => {
        data += chunk;
      });
      
      res.on('end', () => {
        try {
          const json = JSON.parse(data);
          resolve({ statusCode: res.statusCode, data: json });
        } catch (e) {
          resolve({ statusCode: res.statusCode, data: data });
        }
      });
    });
    
    req.on('error', (error) => {
      reject(error);
    });
    
    if (postData) {
      req.write(postData);
    }
    
    req.end();
  });
}

// ==================== API 测试函数 ====================

/**
 * 测试1：创建短码
 */
async function testCreateShortCode() {
  console.log('\n========== 测试1：创建短码 ==========');
  
  const url = new URL(CONFIG.baseUrl + '/webocpc/shortcode/create');
  const postData = JSON.stringify({
    common: {
      app_id: CONFIG.appId,
      version: '1.0.0'
    },
    source_url: CONFIG.testUrl,
    payload: CONFIG.testPayload
  });
  
  const options = {
    protocol: url.protocol,
    hostname: url.hostname,
    port: url.port || (url.protocol === 'https:' ? 443 : 80),
    path: url.pathname,
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Content-Length': Buffer.byteLength(postData)
    }
  };
  
  console.log('请求URL:', CONFIG.baseUrl + '/webocpc/shortcode/create');
  console.log('请求数据:', JSON.parse(postData));
  
  try {
    const result = await request(options, postData);
    console.log('响应状态:', result.statusCode);
    console.log('响应数据:', JSON.stringify(result.data, null, 2));
    
    if (result.data.errno === 0) {
      console.log('✅ 创建短码成功!');
      return result.data.data.short_code;
    } else {
      console.log('❌ 创建短码失败:', result.data.errmsg);
      return null;
    }
  } catch (error) {
    console.error('❌ 请求失败:', error.message);
    return null;
  }
}

/**
 * 测试2：查询长码信息
 */
async function testQueryLongCode(shortCode) {
  console.log('\n========== 测试2：查询长码信息 ==========');
  
  if (!shortCode) {
    console.log('⚠️  跳过测试（没有短码）');
    return;
  }
  
  const url = new URL(CONFIG.baseUrl + '/webocpc/longcode/query');
  const postData = JSON.stringify({
    common: {
      app_id: CONFIG.appId
    },
    short_code: shortCode
  });
  
  const options = {
    protocol: url.protocol,
    hostname: url.hostname,
    port: url.port || (url.protocol === 'https:' ? 443 : 80),
    path: url.pathname,
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Content-Length': Buffer.byteLength(postData)
    }
  };
  
  console.log('请求URL:', CONFIG.baseUrl + '/webocpc/longcode/query');
  console.log('短码:', shortCode);
  
  try {
    const result = await request(options, postData);
    console.log('响应状态:', result.statusCode);
    console.log('响应数据:', JSON.stringify(result.data, null, 2));
    
    if (result.data.errno === 0) {
      console.log('✅ 查询长码成功!');
    } else {
      console.log('❌ 查询长码失败:', result.data.errmsg);
    }
  } catch (error) {
    console.error('❌ 请求失败:', error.message);
  }
}

/**
 * 测试3：上报转化数据（百度）
 */
async function testUploadConvertData() {
  console.log('\n========== 测试3：上报转化数据（百度）==========');
  
  const url = new URL(CONFIG.baseUrl + '/webocpc/convertdata/upload');
  const currentTime = Math.floor(Date.now() / 1000);
  
  const postData = JSON.stringify({
    common: {
      app_id: CONFIG.appId
    },
    sub_id: CONFIG.subId,
    conversion_types: [
      {
        logidUrl: CONFIG.testUrl,
        newType: 4,              // 激活事件
        convertTime: currentTime,
        convertValue: 0
      },
      {
        logidUrl: CONFIG.testUrl,
        newType: 26,             // 付费事件
        convertTime: currentTime + 3600,
        convertValue: 9900       // 99元（单位：分）
      }
    ]
  });
  
  const options = {
    protocol: url.protocol,
    hostname: url.hostname,
    port: url.port || (url.protocol === 'https:' ? 443 : 80),
    path: url.pathname,
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Content-Length': Buffer.byteLength(postData)
    }
  };
  
  console.log('请求URL:', CONFIG.baseUrl + '/webocpc/convertdata/upload');
  console.log('请求数据:', JSON.parse(postData));
  
  try {
    const result = await request(options, postData);
    console.log('响应状态:', result.statusCode);
    console.log('响应数据:', JSON.stringify(result.data, null, 2));
    
    if (result.data.errno === 0) {
      console.log('✅ 上报转化数据成功!');
    } else {
      console.log('❌ 上报转化数据失败:', result.data.errmsg);
    }
  } catch (error) {
    console.error('❌ 请求失败:', error.message);
  }
}

/**
 * 测试4：上报转化数据（奇虎360）
 */
async function testUploadConvertDataQihu() {
  console.log('\n========== 测试4：上报转化数据（奇虎360）==========');
  
  const url = new URL(CONFIG.baseUrl + '/webocpc/convertdata/upload');
  const currentTime = Math.floor(Date.now() / 1000);
  const qihuUrl = 'https://example.com/download?qhclickid=test_qh_clickid_123456';
  
  const postData = JSON.stringify({
    common: {
      app_id: CONFIG.appId
    },
    sub_id: 'qh-001',  // 奇虎渠道（需要先在配置文件中配置）
    conversion_types: [
      {
        logidUrl: qihuUrl,
        newType: 26,             // 付费事件
        convertTime: currentTime,
        convertValue: 9900
      }
    ]
  });
  
  const options = {
    protocol: url.protocol,
    hostname: url.hostname,
    port: url.port || (url.protocol === 'https:' ? 443 : 80),
    path: url.pathname,
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Content-Length': Buffer.byteLength(postData)
    }
  };
  
  console.log('请求URL:', CONFIG.baseUrl + '/webocpc/convertdata/upload');
  console.log('请求数据:', JSON.parse(postData));
  console.log('⚠️  注意：需要在配置文件中配置 qh-001 渠道');
  
  try {
    const result = await request(options, postData);
    console.log('响应状态:', result.statusCode);
    console.log('响应数据:', JSON.stringify(result.data, null, 2));
    
    if (result.data.errno === 0) {
      console.log('✅ 上报转化数据成功（奇虎）!');
    } else {
      console.log('❌ 上报转化数据失败（奇虎）:', result.data.errmsg);
    }
  } catch (error) {
    console.error('❌ 请求失败:', error.message);
  }
}

// ==================== 事件类型说明 ====================
function printEventTypes() {
  console.log('\n========== 事件类型说明 ==========');
  console.log('newType  | 事件名称   | 说明');
  console.log('---------|-----------|------------------');
  console.log('4        | 激活       | 应用首次启动');
  console.log('6        | 下载点击   | 落地页下载按钮点击');
  console.log('25       | 注册       | 用户注册/登录');
  console.log('26       | 付费       | 付费成功');
  console.log('28       | 次日留存   | 用户次日回访');
  console.log('30       | 7日留存    | 用户7日后回访');
}

// ==================== 主函数 ====================
async function main() {
  console.log('==========================================');
  console.log('        Web OCPC API 测试脚本');
  console.log('==========================================');
  console.log('服务器:', CONFIG.baseUrl);
  console.log('应用ID:', CONFIG.appId);
  console.log('子渠道:', CONFIG.subId);
  console.log('==========================================');
  
  printEventTypes();
  
  // 测试1：创建短码
  const shortCode = await testCreateShortCode();
  
  // 等待1秒
  await new Promise(resolve => setTimeout(resolve, 1000));
  
  // 测试2：查询长码信息
  await testQueryLongCode(shortCode);
  
  // 等待1秒
  await new Promise(resolve => setTimeout(resolve, 1000));
  
  // 测试3：上报转化数据（百度）
  await testUploadConvertData();
  
  // 等待1秒
  await new Promise(resolve => setTimeout(resolve, 1000));
  
  // 测试4：上报转化数据（奇虎）- 可选
  // await testUploadConvertDataQihu();
  
  console.log('\n==========================================');
  console.log('           测试完成!');
  console.log('==========================================\n');
}

// 运行测试
main().catch(error => {
  console.error('测试出错:', error);
  process.exit(1);
});

